import {constantRouterMap} from '@/router'
import router from "../../router";
import {getRouters} from '@/apis/index'
// import {getToken} from '@/utils/auth'

import home from '@/page/home';
import otherHome from '@/page/home/otherIndex';

var getRouter = null //用来获取后台拿到的路由
const permission = {
    // 默认值
    state: {
        routers: [],
        getItemVal: '',
        addRoutes: [],
        defaultRoutes: [],
        topbarRouters: [],
        sidebarRouters: []
    },
    mutations: {
        // 获取路由
        SET_ROUTERS: (state, routers) => {
            state.addRoutes = routers
            state.routers = constantRouterMap.concat(routers)
        },
        SET_DEFAULT_ROUTES: (state, routers) => {
            // state.defaultRoutes = constantRouterMap.concat(routers)
        },
        SET_TOPBAR_ROUTES: (state, routers) => {
            for (let i = 0; i < routers.length; i++) {
                if (routers[i].path == '/404') {
                    routers.splice(i, 1)
                }
            }
            state.topbarRouters = routers;
        },
        SET_SIDEBAR_ROUTERS: (state, routers) => {
            state.sidebarRouters = routers
        },
    },
    actions: {
        // 生成路由
        GenerateRoutes({commit}) {
            return new Promise(resolve => {
                // 向后端请求路由数据
                getRouters().then(res => {
                    if (res.data) {
                        const sdata = JSON.parse(JSON.stringify(res.data))
                        const rdata = JSON.parse(JSON.stringify(res.data))
                        const sidebarRoutes = filterAsyncRouter(sdata)
                        const rewriteRoutes = filterAsyncRouter(rdata, false, true)
                        commit('SET_ROUTERS', rewriteRoutes)
                        commit('SET_SIDEBAR_ROUTERS', constantRouterMap.concat(sidebarRoutes))
                        commit('SET_DEFAULT_ROUTES', sidebarRoutes)
                        commit('SET_TOPBAR_ROUTES', sidebarRoutes)
                        resolve(rewriteRoutes)
                        // debugger
                        //     }else{
                        //
                    }
                })
            })
        }
    }
}

// 遍历后台传来的路由字符串，转换为组件对象
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
    return asyncRouterMap.filter(route => {
        if (type && route.children) {
            route.children = filterChildren(route.children)
        }
        if (route.component) {
            if (route.component === 'home') {
                route.component = home
            }else if(route.component ==='otherIndex'){
                route.component = otherHome
            } else {
                route.component = loadView(route.component)
            }
        }
        if (route.children != null && route.children && route.children.length) {
            route.children = filterAsyncRouter(route.children, route, type)
        } else {
            delete route['children']
            delete route['redirect']
        }
        return true
    })
}


function filterChildren(childrenMap, lastRouter = false) {
    var children = []
    childrenMap.forEach((el, index) => {
        if (el.children && el.children.length) {
            if (el.component === 'ParentView') {
                el.children.forEach(c => {
                    c.path = el.path + '/' + c.path
                    if (c.children && c.children.length) {
                        children = children.concat(filterChildren(c.children, c))
                        return
                    }
                    children.push(c)
                })
                return
            }
        }
        if (lastRouter) {
            el.path = lastRouter.path + '/' + el.path
        }
        children = children.concat(el)
    })
    return children
}

export const loadView = (view) => { // 路由懒加载
    return (resolve) => require([`@/page/${view}`], resolve)
}

export default permission
